package com.sky.service;

import com.sky.dto.*;
import com.sky.result.PageResult;
import com.sky.vo.*;

import java.time.LocalDate;

/**
 * @author liudo
 * @version 1.0
 * @project sky-take-out
 * @date 2024/2/25 09:15:15
 */
public interface OrderService {
    /**
     * 提交
     *
     * @param ordersSubmitDTO 订单提交dto
     * @return
     */
    OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO);

    /**
     * 付款
     *
     * @param ordersPaymentDTO 订单付款dto
     */
    void payment(OrdersPaymentDTO ordersPaymentDTO);

    /**
     * 薪酬成功
     *
     * @param number 数字
     */
    void paySuccess(String number);
    /**
     * 历史订单
     *
     * @param ordersPageQueryDTO 订单查询页面dto
     * @return {@link PageResult}
     */
    PageResult historyOrders(OrdersPageQueryDTO ordersPageQueryDTO);


    /**
     * 订单细节
     *
     * @param id id
     * @return {@link OrderVO}
     */
    OrderVO orderDetail(Long id);


    /**
     * 取消通过id
     *
     * @param id id
     */
    void cancelById(Long id);


    /**
     * 重复
     *
     * @param id id
     */
    void repetition(Long id);

    /**
     * 条件搜索
     *
     * @param ordersPageQueryDTO 订单查询页面dto
     * @return {@link PageResult}
     */
    PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO);

    /**
     * 统计数据
     *
     * @return {@link OrderStatisticsVO}
     */
    OrderStatisticsVO statistics();

    /**
     * 通过id细节
     *
     * @param id id
     * @return {@link OrderVO}
     */
    OrderVO detailsById(Long id);

    /**
     * 确认
     *
     * @param ordersConfirmDTO 订单确认dto
     */
    void confirm(OrdersConfirmDTO ordersConfirmDTO);

    /**
     * 拒绝
     *
     * @param ordersRejectionDTO 订单被拒绝dto
     */
    void rejection(OrdersRejectionDTO ordersRejectionDTO);

    /**
     * 取消
     *
     * @param ordersCancelDTO 订单取消dto
     */
    void cancel(OrdersCancelDTO ordersCancelDTO);

    /**
     * 交付通过id
     *
     * @param id id
     */
    void deliveryById(Long id);

    /**
     * 完成订单
     *
     * @param id id
     */
    void completeById(Long id);

    void reminder(Long orderId);

    /**
     * 营业额统计
     *
     * @param begin 开始
     * @param end   终止
     * @return {@link TurnoverReportVO}
     */
    TurnoverReportVO turnoverStatistics(LocalDate begin, LocalDate end);

    /**
     * 订单统计
     *
     * @param begin 开始
     * @param end   终止
     * @return {@link OrderReportVO}
     */
    OrderReportVO ordersStatistics(LocalDate begin, LocalDate end);

    /**
     * 前10名
     *
     * @param begin 开始
     * @param end   终止
     * @return {@link SalesTop10ReportVO}
     */
    SalesTop10ReportVO top10(LocalDate begin, LocalDate end);

    /**
     * 出口
     */
    void export();
}
